package com.example.ad.sdk.domain.ad

import android.content.Context
import com.example.ad.sdk.domain.ad.repositories.AdRetrofitClient
import com.example.ad.sdk.domain.manager.CoroutineScopeManager
import com.example.ad.sdk.domain.models.AdResult
import com.example.ad.sdk.domain.repositories.base.doError
import com.example.ad.sdk.domain.repositories.base.doSuccess
import com.example.ad.sdk.ui.AdSplashActivityHelper
import kotlinx.coroutines.launch

/**
 * 开屏广告类
 *
 * 实现了AdNative接口，用于加载和展示开屏广告。
 * 通过网络请求获取广告数据，并启动专门的开屏广告Activity展示广告内容。
 *
 * @property context 上下文对象，用于启动开屏广告Activity
 * @property channel 广告渠道标识，用于请求特定渠道的广告
 */
class SplashAd(private val context: Context, val channel: String) : AdNative {
    /** 广告结果数据，存储从服务器获取的广告信息 */
    private var resultData : AdResult? = null


    /**
     * 加载开屏广告
     *
     * 通过广告仓库请求指定渠道的广告数据，请求成功后跳转到开屏广告页面。
     * 在协程中执行网络请求，避免阻塞主线程。
     *
     * @param adListener 开屏广告监听器，用于接收广告加载状态回调
     */
    override fun loadSplashAd(adListener: AdNative.AdSplashListener) {
        CoroutineScopeManager.defaultScope.launch {
            adListener.onLoading()
            AdRetrofitClient.defService.getAd(channel, AdRequestParam(1)).doSuccess {
                resultData = it
                if (it == null){
                    adListener.onFailed( "no data")
                    return@doSuccess
                }
                AdSplashActivityHelper.go(context, it.url)
                adListener.onLoaded()
            }.doError { code, message ->
                adListener.onFailed( message)
            }
        }
    }

    /**
     * 加载插屏广告
     *
     * 该类主要处理开屏广告，此方法留空待实现。
     *
     * @param adListener 插屏广告交互监听器
     */
    override fun loadInterstitialAd(adListener: AdNative.AdInteractionListener) {
    }
}